﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DAL
{
    public  partial  class NotaIngreso
    {
        public int Add(dbGestionDataContext  _db,
            int? idProveedor,
            string numdocumento,
            string descripcion,
            string documentoRef,
            int idDocumentoTipo,
            int idAlmacen,
            DateTime fecha,
            DateTime fechaDoc,
            int idMotivo,
            string observaciones,
            int idusuarioCre,
            int idObra,
            int idOrigen,
            decimal? tipoCambioDollar)

        {
            this.idProveedor = idProveedor;
            this.numDocumento = numdocumento;
            this.descripcion = descripcion;
            this.documentoRef = documentoRef;
            this.idDocumentoTipo = idDocumentoTipo;
            this.idAlmacen = idAlmacen;
            this.fecha = fecha;
            this.fechaDoc = fechaDoc;
            this.idMotivo = idMotivo;
            this.observacion = observaciones;
            this.idUsuarioCre = idusuarioCre;
            this.idObra = idObra;
            this.fechaCre = DateTime.Now;
            this.idUsuarioMod = idusuarioCre;
            this.fechaMod = DateTime.Now;
            this.idOrigen = idOrigen;
            this.tipoCambioDollar = tipoCambioDollar;

            _db.NotaIngresos.InsertOnSubmit(this);
            _db.SubmitChanges();
            return this.idInternal;

        }

        public void Update(dbGestionDataContext _db,
            string documentoRef,
            int idDocumentoTipo,
            DateTime fecha,
            string observaciones,
            int idusuarioMod)
        {
            
            this.documentoRef = documentoRef;
            this.idDocumentoTipo = idDocumentoTipo;
            this.observacion = observaciones;
            this.idUsuarioCre = idusuarioMod;
            this.idUsuarioMod = idusuarioMod;
            this.fechaMod = DateTime.Now;

           
            _db.SubmitChanges();
            

        }

        public int getidAnterior(dbGestionDataContext _db, int idinternal, int idAlmacen)
        {
            int intAnterior = 0;


            var id = from i in _db.NotaIngresos
                     where i.idInternal < idinternal && i.idAlmacen == idAlmacen
                     group i by i.idAlmacen into g
                     select new
                     {
                         idAnterior = g.Max(p => p.idInternal)
                     };

            if (id.Count() > 0)
            {
                intAnterior = id.First().idAnterior;

            }
            else
            {
                throw new Exception("No existe Registros");
            }


            return intAnterior;

        }

        public int getidSiguiente(dbGestionDataContext _db, int idinternal, int idAlmacen)
        {
            int intSiguiente = 0;

            //revisar la sentencia generada
            var id = from i in _db.NotaIngresos
                     where i.idInternal > idinternal && i.idAlmacen == idAlmacen
                     group i by i.idAlmacen into g
                     select new
                     {
                         idSiguiente = g.Min(p => p.idInternal)
                     };


            if (id.Count() > 0)
            {
                intSiguiente = id.First().idSiguiente;

            }
            else
            {
                throw new Exception("No existe Registros");
            }

            return intSiguiente;
        }

        public string getCorrelativo(dbGestionDataContext _db, int idAlmacen)
        {
            string numDocumento = "";
            var q = from a in _db.NotaIngresos
                    where a.idAlmacen == idAlmacen
                    group a by a.idAlmacen into g
                    select new
                    {
                        idObra = g.Key,
                        numDocumento = g.Max(p => p.numDocumento)
                    };
            if (q.Count() == 0)
            {
                numDocumento = "00000001";
            }
            else
            {
                int numActual = int.Parse(q.First().numDocumento);
                numActual++;
                if (numActual < 10)
                    numDocumento = "0000000" + numActual.ToString();
                else if (numActual < 100)
                    numDocumento = "000000" + numActual.ToString();
                else if (numActual < 1000)
                    numDocumento = "00000" + numActual.ToString();
                else if (numActual < 10000)
                    numDocumento = "0000" + numActual.ToString();
                else if (numActual < 100000)
                    numDocumento = "000" + numActual.ToString();
                else if (numActual < 1000000)
                    numDocumento = "00" + numActual.ToString();
                else if (numActual < 1000000)
                    numDocumento = "0" + numActual.ToString();
                else if (numActual < 10000000)
                    numDocumento = numActual.ToString();
                else if (numActual > 9999999)
                {
                    throw new Exception("Limite  de Correlativo Comparativo");
                }


            }
            return numDocumento;

        }

      
    }
}
